#include <global_gdt.h>
#include <string.h>
#include <debug.h>

Descriptor_t gdt[GDT_SIZE];  // 内核全局描述符表
Pointer_t gdtPtr;  // 内核全局描述符表指针

void GdtInit()
{
    LOG_DEBUGK("init global gdt");
    asm volatile("sgdt gdtPtr"); // 加载gdt，将loader中已有的全局描述符表拷贝到c语言定义的数据结构中，原来定义了一个
    memcpy(&gdt, (void *)gdtPtr.base, gdtPtr.limit + 1);
    gdtPtr.base = (u32)&gdt;
    gdtPtr.limit = sizeof(gdt) - 1;

    asm volatile("lgdt gdtPtr"); // 保存gdt，然后再将c中数据结构的内存地址重新保存回去，之后就可用c的数据结构了，重设后变成128个
}
